
package com.crowdfunding.circle.common.tags;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

/**
 * 编码和解码
 *
 * @author 朱国军
 * @since 1.0
 * @version 2016年3月28日 朱国军
 */
public final class EncodesTag extends TagSupport {
    
    private static Logger logger = Logger.getLogger(EncodesTag.class);
    
    private static final long serialVersionUID = -7177581356703711990L;
    
    /** 要编码或解码的值 */
    private String value;
    
    /** 编码或解码类型：1,URL编码；2，URL解码；3，HTML编码；4，HTML解码；5，HTML解码+去掉HTML格式 */
    private Integer type;
    
    /**
     * 获取要编码或解码的值
     *
     * @return 要编码或解码的值
     */
    public String getValue() {
        return value;
    }
    
    /**
     * 设置要编码或解码的值
     *
     * @param value 要编码或解码的值
     */
    public void setValue(String value) {
        this.value = value;
    }
    
    /**
     * 获取编码或解码类：1,URL编码；2，URL解码；3，HTML编码；4，HTML解码；5，HTML解码+去掉HTML格式
     *
     * @return 编码或解码类：1,URL编码；2，URL解码；3，HTML编码；4，HTML解码；5，HTML解码+去掉HTML格式
     */
    public Integer getType() {
        return type;
    }
    
    /**
     * 设置编码或解码类：1,URL编码；2，URL解码；3，HTML编码；4，HTML解码；5，HTML解码+去掉HTML格式
     *
     * @param type 编码或解码类：1,URL编码；2，URL解码；3，HTML编码；4，HTML解码；5，HTML解码+去掉HTML格式
     */
    public void setType(Integer type) {
        this.type = type;
    }
    
    @Override
    public int doEndTag() throws JspException {
        return EncodesTag.EVAL_PAGE;
    }
    
    @Override
    public int doStartTag() throws JspException {
        if (StringUtils.isNotBlank(value)) {
            try {
                if (type == 1) {
                    value = URLEncoder.encode(value, "UTF-8");
                } else if (type == 2) {
                    value = URLDecoder.decode(value, "UTF-8");
                } else if (type == 3) {
                    value = StringEscapeUtils.escapeHtml4(value);
                } else if (type == 4) {
                    value = StringEscapeUtils.unescapeHtml4(value);
                } else if (type == 5) {
                    value = StringEscapeUtils.unescapeHtml4(value);
                    value = value.replaceAll("</?[^>]+>", ""); // 剔出<html>的标签
                    value = value.replaceAll("<a>\\s*|\t|\r|\n</a>", "");
                }
            } catch (UnsupportedEncodingException e) {
                logger.error("URL编码或解码出错", e);
                value = "error:URL编码或解码出错";
            }
        } else {
            value = "";
        }
        
        JspWriter writer = this.pageContext.getOut();
        try {
            writer.write(value);
        } catch (IOException e) {
            logger.error("字典项转radio的Tag出错", e);
        }
        return EncodesTag.SKIP_BODY;
        
    }
    
}
